package com.wanqing.mapper;

import com.github.pagehelper.Page;
import com.wanqing.annotation.AutoFill;
import com.wanqing.dto.CategoryPageQueryDTO;
import com.wanqing.entity.Category;
import com.wanqing.enumeration.OperationType;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * CategoryMapper接口用于处理与类别相关的数据库操作
 * 它定义了对类别数据进行增删查改的方法
 */
@Mapper
public interface CategoryMapper {

    /**
     * 执行类别信息的分页查询
     *
     * @param categoryPageQueryDTO 包含分页查询条件的DTO对象
     * @return 返回查询结果的分页对象
     */
    Page<Category> pageQuery(CategoryPageQueryDTO categoryPageQueryDTO);

    /**
     * 插入新的类别信息到数据库
     *
     * @param category 要插入的类别对象，包括所有必要字段
     */
    @AutoFill(OperationType.INSERT)
    @Insert("insert into category " +
            "value (#{id},#{type}, #{name}, #{sort}, #{status}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})")
    void save(Category category);

    /**
     * 更新数据库中的类别信息
     *
     * @param category 包含更新后信息的类别对象
     */
    @AutoFill(OperationType.UPDATE)
    void update(Category category);

    /**
     * 根据类别类型查询有效的类别列表
     *
     * @param type 类别类型，用于筛选查询结果
     * @return 返回符合条件的类别列表，按排序字段和更新时间降序排列
     */
    //@Select("select * from category where status=1 and type = #{type} order by sort,update_time desc ")
    List<Category> list(Integer type);

    /**
     * 根据类别ID删除类别信息
     *
     * @param id 要删除的类别的ID
     */
    @Delete("delete from category where id = #{id}")
    void deleteById(Long id);
}
